package cn.sxt.queue.producer;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 消息队列的生产者
 *
 * @author Mxb
 * @version 1.0
 * @date 2020/5/27 21:20
 */
public class TestMessageProducer {

    //private static final String BROKER_URL = "tcp://www.leige.tech:61616";
    //地址在mq conf activemq.xml里面找
    //private static final String BROKER_URL = "tcp://39.99.166.61:61616";
    private static final String BROKER_URL = "tcp://localhost:61616";
    private static final String QUEUE_NAME = "mq-name-queue";

    public static void main(String[] args) throws JMSException {
        //第一步：创建ConnectionFactory对象，需要指定服务端ip及端口号。
        ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);

        //第二步：使用ConnectionFactory对象创建一个Connection对象。
        Connection connection = factory.createConnection();

        //第三步：开启连接，调用Connection对象的start方法。
        connection.start();

        //第四步：使用Connection对象创建一个Session对象。
        //第一个参数：是否开启事务。true：开启事务，第二个参数忽略。
        //第二个参数：签收 : 当第一个参数为false时，才有意义。消息的应答模式。
        // 1、自动应答2、手动应答。一般是自动应答。
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //第五步：使用Session对象创建一个Destination对象（topic、queue），此处创建一个Queue对象。
        //创建目的地(具体是 队列还是 主题)
        Queue queue = session.createQueue(QUEUE_NAME);

        //第六步：使用Session对象创建一个Producer对象。(生产者)
        MessageProducer producer = session.createProducer(queue);

        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

        //第七步：创建一个Message对象，创建一个TextMessage对象。
        for (int i = 1; i < 10; i++) {
            // 一个字符串
            TextMessage message = session.createTextMessage();
            message.setText("hello---mq----" + i);
            //第八步：使用Producer对象发送消息。
            producer.send(message);
            System.out.println("消费发送成功" + i);
        }

        //第九步：关闭资源。
        producer.close();
        session.close();
        connection.close();
        System.out.println("消息发送完成。。。");
    }
}
